


// Nodejs用http模块搭建http服务器：
//引入http模块
/*
var http = require("http");
var url = require('url');
//设置主机名
var hostName = '192.168.0.105';
//设置端口
var port = 8092;

//创建服务
var server = http.createServer(function (req, res) {
    var string = url.parse(req.url, true);
    console.log("URL:" + req.url + "  " + string.pathname);
    res.setHeader('Access-Control-Allow-Origin', "*")
    res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.setHeader('Content-Type', 'text/plain');
    res.end("hello nodejs");

});
server.listen(port, hostName, function () {
    console.log(`服务器运行在http://${hostName}:${port}`);
});
*/

// 用Nodejs的express搭建http服务器：
var express = require('express')
var serve_index = require('serve-index');

var bodyParser = require('body-parser');
const url = require('url');

//支持 'Content-Type': 'multipart/form-data;
var multiparty = require('multiparty');

//文件
var fs = require('fs')


var mysql   = require('mysql');


var path   = require('path');



//设置主机名
// var hostName = '192.168.0.105';
var hostName = 'localhost';

//设置端口
var port = 8092;
var app = express();


//Nodejs req.body 默认为空。如果使用了 express 框架，可以输入以下代码解决
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())


var routes = express.Router();

app.use("/req", routes);

// 发布静态目录，静态目录是当前路径下的public文件夹
app.use(serve_index('./public', {'icons': true}));
app.use(express.static('./public'));

// var server = app.listen(port, hostName, (err) => {
//     if (err) {
//         console.log(err)
//     } else {
//         console.log(`服务开启成功【端口号:${port}】`)
//     }
// });

//不输入hostname参数，访问的url，任意url均可访问
var server = app.listen(port, (err) => {
    if (err) {
        console.log(err)
    } else {
        console.log(`服务开启成功【端口号:${port}】`)
    }
});


/**
 * express建立GET接口
 * http://192.168.1.7:8092/req/login?name='name12'&pwd='123'
 */


//express错误处理  404 自定义
app.get('*',function (req,res) {
    // res.send('my custom 404 not found',404);
    // res.status(404).json({"err":"404"});

    console.log(req.url + " 404");
    res.status(404).send('Sorry, we cannot find that!');
    res.end();
});


//添加跨域路由？
// app.all('*', function(req, res, next) {
//     res.header("Access-Control-Allow-Origin", "*");
//     res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
//     res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
//     console.log("拦截跨域添加路由");
//     next();
// });


//所有请求拦截
routes.use(function (req,res,next) {

    //设置允许跨域
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");


    //这段仅仅为了方便返回json而已
    // res.header("Content-Type", "application/json;charset=utf-8");
    // if(req.method == 'OPTIONS') {
    //     //让options请求快速返回
    //     res.sendStatus(200);
    // } else {
    //     next();
    // }
//拦截是否登录等
    console.log('拦截'+req.path);

    if ( req.path === '/login' )
    {
        console.log("login");
        next();
    }
    else
    {
        //TODO:验证token有效性
        console.log("验证token有效性");
        next();
    }
})

routes.get('/login', (req, res) => {
    var string = url.parse(req.url, true);
    //解析参数
    var params = url.parse(req.url, true).query;
    console.log(params)
    var user = {};
    user.name = params.name;
    user.pwd = params.pwd;
    var responseJson = { name: 'abc', pwd: '123' };
    var response = { status: 2, data: user };
    // res.send(JSON.stringify(response));
    console.log("URL:" + req.url + "  " + string.pathname);
    res.status(200).json(response);
    //有数据返回用res.send();
    //无数据返回用res.end();
    // res.end("hello nodejs");


    //情况控制台日志


});

routes.get('/logout', (req, res) => {
    var string = url.parse(req.url, true);
    //解析参数
    var params = url.parse(req.url, true).query;
    console.log(params)
    var user = {};
    user.name = params.name;
    user.token = params.token;
    var responseJson = { name: 'abc' };
    var response = { status: 2, data: user };
    // res.send(JSON.stringify(response));
    console.log("URL:" + req.url + "  " + string.pathname);
    res.status(200).json(response);
    //有数据返回用res.send();
    //无数据返回用res.end();
    // res.end("hello nodejs");
});

/**
 * express建立POST接口
 */
routes.post('/r', (req, res) => {
    var string = url.parse(req.url, true);
    console.log("URL:" + req.url + "  " + string.pathname);
    //解析参数
    var params = req.body;
    console.log("params:"  + params);

    var user = {};
    user.name = params.name;
    user.pwd = params.pwd;
    var response = { status: 1, data: user };
    res.send(JSON.stringify(response));
    // res.send('post:' + string.pathname + "  " +
    //     JSON.stringify(text));
    res.end();
    console.log(req.method);//post
    console.log(req.body);//{ a: '3', b: '4', c: '5' }
    // console.log(req.body.a); //3
    // res.end("hello nodejs");
});

 function isJson (obj){
    var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object   object]" && !obj.length;
    return isjson;
}

//路径最后需要加 "/"
//自动创建多层目录
function mkdir(filepath) {
    const arr=filepath.split('/');
    const dirCache={};

    console.log("filePath",filepath);

    let dir=arr[0];
    for(let i=1;i<arr.length;i++){
        if(!dirCache[dir]&&!fs.existsSync(dir)){
            dirCache[dir]=true;
            fs.mkdirSync(dir);
        }
        dir=dir+'/'+arr[i];
    }
}

 //表单形式上传文件
routes.post('/upImg', (req, res) => {

    console.log("body " + req.body);

    //生成multiparty对象，并配置上传目标路径
    var form = new multiparty.Form();

    //路径不存在，则需要提前创建
    form.uploadDir = './public/images2/subImg/';

//检查某个目录是否存在
    //异步，需要加个promise，实现同步形式
    fs.exists(form.uploadDir, function (exists) {

        console.log(exists ? "路径存在" : "路径不存在");
        if (!exists) {
        }
        mkdir(form.uploadDir);
    })

    //单文件大小限制
    form.maxFieldsSize = 1024*1024 * 5;

    //一次上传文件数量
    //form.maxFields = 1000;  设置所以文件的大小总和

    form.parse(req, function(err, fields, files) {
        // console.log(fields, files,' fields2');

        if (err)
        {
            console.log("upImg para err" + err);
            res.json({status:201});
            return;
        }

        //自定义参数
        console.log(fields);
        console.log(fields.user[0]);

        let userInfo = fields.user[0];

        if (isJson(userInfo))
        {
            console.log('userinfo is json');
        }
        console.log(userInfo.type);
        //文件参数
        console.log(files);
        console.log(files.file[0].path);
        // files.file[0].path = './public/images/123.jpg';
        //同步重命名文件名
        fs.rename(files.file[0].path, './public/images2/456.jpg', function (err) {
            if (err) {
                console.log(err);
                console.log("修改文件名称失败");
            }
        });

        if (err) {
        } else {
            // res.json({ imgSrc: files.image[0].path })
        }
        res.json({status:200});
        res.end();
    });
});
